// DAO/Impl/DiscussionPostDaoImpl.java
package com.hp.DAO.Impl;                         // 实现包

import com.hp.DAO.BaseDao;                       // 基类
import com.hp.DAO.DiscussionPostDao;             // 接口：DiscussionPostDao
import com.hp.Model.DiscussionPost;              // 实体：讨论帖
import com.hp.Util.RowMapper;                    // 行映射器
import com.hp.Util.SimpleJdbcTemplate;           // JDBC 模板

import java.sql.Timestamp;                // 时间戳
import java.util.Date;                    // Date
import java.util.List;                    // List

/** DiscussionPostDao 的 JDBC 实现 */
public class DiscussionPostDaoImpl extends BaseDao implements DiscussionPostDao {
    public DiscussionPostDaoImpl(SimpleJdbcTemplate jdbc) { super(jdbc); } // 构造注入

    // RowMapper：ResultSet -> DiscussionPost
    private static final RowMapper<DiscussionPost> M = rs -> {
        DiscussionPost p = new DiscussionPost();                          // 新建实体
        p.setId(rs.getLong("id"));                                         // id
        p.setCourseId(rs.getLong("course_id"));                            // 课程ID
        p.setUserId(rs.getLong("user_id"));                                // 发帖人
        p.setContent(rs.getString("content"));                              // 内容
        Timestamp ts = rs.getTimestamp("created_at");                      // 发帖时间
        p.setCreatedAt(ts == null ? null : new Date(ts.getTime()));        // 转 Date
        p.setIsDeleted(rs.getBoolean("is_deleted"));                       // 是否删除
        return p;                                                          // 返回
    };

    @Override
    public DiscussionPost findById(Long id) {                              // 按主键查询
        String sql = "SELECT id,course_id,user_id,content,created_at,is_deleted FROM discussion_post WHERE id=?"; // SQL
        return queryOne(sql, M, id);                                       // 执行
    }

    @Override
    public List<DiscussionPost> listByCourse(Long courseId, int offset, int limit) { // 按课程分页列出未删除帖子
        String sql = "SELECT id,course_id,user_id,content,created_at,is_deleted FROM discussion_post " +
                "WHERE course_id=? AND is_deleted=0 ORDER BY id DESC LIMIT ? OFFSET ?"; // SQL
        return queryList(sql, M, courseId, limit, offset);                 // 执行
    }

    @Override
    public Long insert(DiscussionPost p) {                                 // 新增帖子
        String sql = "INSERT INTO discussion_post (course_id,user_id,content,created_at,is_deleted) VALUES (?,?,?,?,?)"; // SQL
        Date created = p.getCreatedAt() == null ? new Date() : p.getCreatedAt(); // 默认当前
        boolean deleted = p.getIsDeleted() != null && p.getIsDeleted();          // 删除标记
        return execInsertReturnId(sql, p.getCourseId(), p.getUserId(), p.getContent(),
                new Timestamp(created.getTime()), deleted);                       // 执行插入
    }

    @Override
    public int softDelete(Long id) {                                       // 软删除
        String sql = "UPDATE discussion_post SET is_deleted=1 WHERE id=?"; // SQL
        return execUpdate(sql, id);                                        // 执行更新
    }

    @Override
    public int hardDelete(Long id) {                                       // 物理删除
        String sql = "DELETE FROM discussion_post WHERE id=?";             // SQL
        return execUpdate(sql, id);                                        // 执行删除
    }
}

